远程连接Linux的原理-SSH服务

1. SSH远程连接介绍

当前,在几乎所有的互联网企业环境中,最常用的提供Linux远程连接服务的工具就是SSH软件了。SSH分为SSH客户端和SSH服务端两部分。其中,SSH服务端包含的软件程序主要有openssh和openssl。openssh是提供SSH服务的程序,openssl是为SSH提供连接加密的程序。

在Linux系统中可以用如下方法查询SSH服务器端工具的安装情况。

1
2
3
[root@www ~]# rpm -qa openssh openssl
openssl-1.0.1e-57.el6.x86_64
openssh-5.3p1-123.el6_9.x86_64

2. SSH服务器端介绍

启动Linux系统时,默认情况下,SSH服务端程序就会随系统一起启动,SSH服务是一个守护进程(daemon),它在系统后台永久运行并时刻响应所有来自SSH客户端的连接请求。SSH服务器端的进程名为sshd,负责实时监听远程SSH客户端的连接请求并进行处理,这些请求包括公共密钥认证、密钥交换、对称密钥加密和非安全连接等。SSH服务是Linux系统优化时需要保留开机自启动的服务之一。

3. SSH客户端介绍

SSH客户端最常用的工具有:SecureCRT、Xshell、Putty及Linux下的SSH客户端软件。

4. SSH协议介绍

SSH服务器端和SSH客户端之间的交流都是通过SSH协议来实现的。SSH协议是Secure Shell Protocol的简写,由IETF网络小组(Network Working Group)制定。在进行数据传输之前,SSH先通过加密技术对联机数据包进行加密处理,然后再进行数据传输,这样就可确保传递的数据安全。

SSH是专为远程登陆会话和其他网络服务提供的安全性协议。利用SSH协议可以有效地防止远程管理过程中的信息泄露,在当前的生产环境中,绝大多数企业普遍采用SSH协议服务来代替传统的不安全的远程联机服务软件,如telnet(23端口,非加密的)等。

SSH协议有两个不兼容的版本,分别是SSH 1.x和SSH2.x。

OpenSSH同时支持SSH 1.x和SSH 2.x。用SSH 2.x的客户端程序不能连接到SSH 1.x的服务程序上,SSH 2.x比SSH 1.x更安全,默认情况下服务器端通过SSH 2.x协议提供服务。

5. SSH客户端和SSH服务器端远程连接原理示意图

下图为SSH客户端和SSH服务器端远程连接的形象示意图,下表为SSH服务远程连接需要设定的五个要素。

SSH服务远程连接示意图

协议 IP 端口 用户名 密码
SSH(加密的) 192.168.111.111 22 theshu theshu
telnet(未加密) 192.168.111.111 23 theshu theshu

6. SSH远程连接故障排查示例

假设远程Linux服务器的IP地址为192.168.111.111,现在要进行连接故障排查。

首先,查看远端服务是否畅通,注意:操作命令的机器为客户端计算机命令行,基本思路检查如下。

6.1. 利用ping命令检查(客户端执行)

具体命令为:

1
ping 192.168.111.111 #<==该民工适合Linux和Windows

这里通过ping命令从客户端发包到服务器,看看是否有数据包返回,从而确定物理链路是不是通常。

提示:也可以通过tracert -d 192.168.111.111(仅适合Windows)或traceroute 192.168.111.111 -n(适合Linux)命令跟踪路由情况,这两个跟踪路由的命令一般用于广域网。

6.2. 利用telnet或nmap命令检查(客户端执行)

具体命令为:

1
telnet 192.168.111.111 22


1
nmap 192.168.111.111 -p 22 #<==仅适合Linux,需要安装软件包才能使用

通过该命令可以查看连接服务器端192.168.111.111端口是不是处于开通状态,因为SSH服务默认开启的是22端口。

6.3. 检测iptables等防火墙策略是否阻挡了连接(服务端执行)

具体命令为:

1
/etc/init.d/iptables status

7. SSH远程连接故障排查思路逻辑图

排查思路图解说明如下:

SSH远程连接故障排查思路逻辑图

说明:

  • 第一步:物理链路是否有问题(客户端执行)
    • ping 192.168.111.111排查客户端到服务器端线路问题,ping是常用的网络连通性检查工具
    • tracert -d 192.168.111.111路由跟踪命令,也可以检查路是否畅通,-d是不进行反向解析
  • 第二步:SSH服务是否有问题(客户端执行)
    • telnet 192.168.111.111 22判断SSH服务器默认的22端口是否打开(客户端执行)。一看端口是否打开,二看端口是否改变了,三看防火墙等
    • nmap 192.168.111.111 -p 22也能达到和telnet相同的效果,但nmap仅在Linux中使用
  • 第三步:是不是防火墙阻挡(服务器端查看)
    • /etc/init.d/iptables stopLinux防火墙iptables,可能好心办坏事,阻挡了远程连接。在生产中防火墙规则按需开启
0%